/**
 * Description：移动端登录信息。当然包括注册。登录等信息。
 * 和Web端公用一个账号和密码，但实际接口不同。
 */
var express = require('express');
var router = express.Router();
var User = require('../../../models/user.ts');

var encrypt = require('../enoadEncrypt');

/**新用户注册接口
 * 入参{username,
      password,
      passwordRepeat,
      email}
 */

//@Api(name="/rest/mobile/user/reg")
router.post('/user/reg', (req, res) => {
  // 通过 req.query 获取客户端通过查询字符串，发送到服务器的数据
  const body = req.body;
  var password = encrypt(body.password);
  var newUser = new User({
    name: body.name,
    tel: body.tel,
    password: body.password,
    email: body.email,
    role: body.role,
    department: body.department,
  });
  //检查用户名是否已经存在
  User.get(newUser.name, function (err, user) {
    if (err) {
      res.send({
        code: 201, // 0 表示处理成功，1 表示处理失败
        msg: '服务器错误，请联系管理员', // 状态的描述
        data: null, // 需要响应给客户端的数据
      });
    } else {
      if (user) {
        res.send({
          code: 201, // 0 表示处理成功，1 表示处理失败
          msg: '用户名已被占用，请重新输入用户名', // 状态的描述
          data: user, // 需要响应给客户端的数据
        });
      } else {
        //如果不存在则新增用户
        newUser.save(function (err, user) {
          if (err) {
            res.send({
              code: 201, // 0 表示处理成功，1 表示处理失败
              msg: '服务器错误，请联系管理员', // 状态的描述
              data: null, // 需要响应给客户端的数据
            });
          }
          req.session.user = user;
          res.send({
            code: 200, // 0 表示处理成功，1 表示处理失败
            msg: '恭喜你，注册成功!', // 状态的描述
            data: user, // 需要响应给客户端的数据
          });
        });
      }
    }
  });
});

//@Api(name="/rest/mobile/user/update")
router.post("/user/update", (req, res) => {
  var user =
    req.session.user || (req.body.user ? JSON.parse(req.body.user) : "");
  if (!user) {
    res.send({
      code: 201,
      msg: "您还未登录，无法更新",
      data: null,
    });
  } else {
    const body = req.body;
    const id = req._id;
    var newUser = new User({
      name: body.name,
      tel: body.tel,
      password: body.password,
      email: body.email,
      role: body.role,
      department: body.department,
    });
    //检查用户名是否已经存在
    User.update(id, newUser, function (err, user) {
      if (err) {
        res.send({
          code: 201, // 0 表示处理成功，1 表示处理失败
          msg: "服务器错误，请联系管理员", // 状态的描述
          data: null, // 需要响应给客户端的数据
        });
      } else {
        res.send({
          code: 200, // 0 表示处理成功，1 表示处理失败
          msg: "更新成功", // 状态的描述
          data: user, // 需要响应给客户端的数据
        });
      }
    });
  }
});

/**用户登录接口。
 * 入参{username,
      password,}
 */
//@Api(name="/rest/mobile/user/login")
router.post('/user/login', (req, res) => {
  // 通过 req.body 获取请求体中包含的 url-encoded 格式的数据
  const body = req.body;
  // 调用 res.send() 方法，向客户端响应结果
  //检查用户是否存在
  User.get(body.username, function (err, user) {
    if (!user) {
      res.send({
        code: 201,
        msg: '用户不存在',
        data: null,
      });
      //用户不存在则跳转到登录页
    } else {
      //检查密码是否一致
      if (user.password != body.password) {
        res.send({
          code: 201,
          msg: '密码错误',
          data: null,
        });
        //密码错误则跳转到登录页
      } else {
        //用户名密码都匹配后，将用户信息存入 session
        req.session.user = user;
        res.send({
          code: 200,
          msg: '登陆成功！',
          data: user,
        });
      }
    }
  });
});

// 用户登出接口。
//@Api(name="/rest/mobile/user/logout")
router.post('/user/logout', (req, res) => {
  // 通过 req.body 获取请求体中包含的 url-encoded 格式的数据
  console.debug('[/user/logout]', req.session);
  req.session.user = null;
  // 调用 res.send() 方法，向客户端响应结果
  res.send({
    code: 200,
    msg: '登出成功',
    data: null,
  });
});


module.exports = router;
